library(nycflights13)
library(tidyverse)
library(knitr)
library(ggthemes)

Exercício 1: Juntando dois bancos

  1. Crie dois tibbles pequenos (com a função tibble()) como eles abaixo e juntar eles pela coluna ID.
t1 <- tibble(ID = c("A001", "A002", "A003"),
             valor = c(10, 20, 50))

t2 <- tibble(ID = c("A001", "A002", "A003"),
             populacao = c(3000, 2500, 6000))

left_join(t1, t2, by = "ID")
  1. Execute um join dos bancos de dados flights e planes para apenas os voos de carrier United (UA) no dia 16 de setembro de 2013. Qual é o modelo (model) de avião mais comum destes voos?
flights %>% 
  filter(carrier == "UA", month == 9, day == 16, year == 2013) %>%
  left_join(planes, by = "tailnum") %>%
  group_by(model) %>%
  tally() %>% 
  arrange(-n) %>% .[[1,1]]
## [1] "757-222"
  1. Quantos assentos (seats) totais foram instalados nos voos de JFK para Atlanta (ATL) em cada mês?
flights %>%
  left_join(planes, by = "tailnum") %>% 
filter(origin == "JFK", dest == "ATL") %>% 
  group_by(month) %>% 
  summarise(total_assentos = sum(seats, na.rm = TRUE))
  1. Queremos um resumo do número de voos no ano de 2013 por companhia aérea. Mas o nosso banco de flights não contém o nome oficial das companhias. Execute um join entre o banco de dados flights e airlines para criar uma tabela resumida e clara.
flights %>% 
  left_join(airlines, by = "carrier") %>% 
  group_by(carrier, name) %>% 
  tally() %>% 
  arrange(-n)

Exercício 2: Joins com Dados Faltantes

  1. Crie dois tibbles pequenos (com a função tibble()) como eles abaixo e juntar eles pelos identificadores comuns usando left_join().
t1 <- tibble(
  ID = c("A001", "A001", "A002", "A003", "A003"),
  ano = c(2019, 2020, 2020, 2019, 2020),
  valor = c(10, 12, 17, 50, 64)
)
t2 <- tibble(
  ID = c("A001", "A002", "A002", "A003"),
  ano = c(2019, 2019, 2020, 2019),
  populacao = c(3000, 2500, 1900, 6000)
)
left_join(t1, t2, by = c("ano", "ID"))
  1. Queremos dois banco de dados:

    1. Um limpo que contém apenas as unidades com dados completos para valor e população. Use um join apropriado para criar este banco de dados.
inner_join(t1, t2, by = c("ID", "ano"))
    1. Um ‘completo’ que contém todas as unidades mesmo que não temos dados completos. Use um join apropriado para criar este banco de dados.
full_join(t1, t2, by = c("ID", "ano"))
    1. Usando um join, identifique a precipitatação (precip) média no momento de partido dos voos de LGA em cada dia de dezembro.
flights %>% head()
weather %>% head()
flights %>% 
  left_join(weather, by = c("year", "month", "day", "hour", "origin" )) %>% 
  filter(origin == "LGA", month == 12) %>% 
  group_by(day) %>% 
  summarise(precip_media = round(mean(precip, na.rm = TRUE), 2))
    1. Para quantos voos em cada dia de dezembro em LGA faltamos dados de tempo?
flights %>% filter(origin == "LGA", month == 12) %>% 
  anti_join(weather, by = c("year", "month", "day", "hour", "origin" )) %>% 
  
  group_by(day) %>% 
  tally()
    1. Para quantos horas em cada dia de dezembro em LGA temos dados sobre o tempo mas não temos nenhum voo?
weather %>% filter(origin == "LGA", month == 12) %>% 
  anti_join(flights, by = c("year", "month", "day", "hour", "origin" )) %>% 
  
  group_by(day) %>% 
  tally()
  1. A visibilidade afeta o número de partidas por hora?

    1. Usando um join apropriado, gere um banco de dados com a visibilidade em cada hora do ano e o número de voos que decolaram nesta hora.
flights %>% group_by(year, month, day, origin, hour) %>% tally() %>% 
  right_join(weather, by = c("year", "month", "day", "origin", "hour"))
    1. Resumo o seu banco de dados para estimar a média do número de voos por hora por valor da variável visibilidade. Mostre os resultados num gráfico de pontos.
flights %>% group_by(year, month, day, origin, hour) %>% tally() %>% 
  right_join(weather, by = c("year", "month", "day", "origin", "hour")) %>% 
  ungroup() %>% group_by(visib) %>% 
  summarise(media_n = mean(n, na.rm = TRUE)) %>% 
  ggplot() +
  geom_point(aes(x = visib, y = media_n))

Exercício 3: Dados Nested

  1. Crie um tibble nested, com a unidade de análise cada origem-destino par, e a coluna de data todos os detalhes dos voos entre aquele origem e destino.
flights %>% group_by(origin, dest) %>% nest()
  1. Crie um tibble nested por aeroporto de origem, mês, dia e hora. Use um join para juntar os dados de weather para cada aeroporto e hora.
flights %>% group_by(origin, month, day, hour) %>%  nest() %>% 
  left_join(weather, by = c("month", "day", "origin", "hour"))